package com.briup.corejava.day04;

import java.util.Scanner;

/**
 * while循环拓展案例
 * 计算两个正整数的最大公约数和最小公倍数
 * 参考公式：最小公倍数 = 两数乘积 / 最大公约数
 * 算法：辗转相除法：
 *      两数相除如果不能整除，那么下一次就用除数除以余数
 *      直到整除为止，此时除数就为最大公约数
 */
public class Test5 {
    public static void main(String[] args) {
        // 1、键盘获得两个数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个正整数，以回车进行区分：");
        int a = sc.nextInt();
        int b = sc.nextInt();
        // 2、判断两个数的大小关系，取出较大数和较小数
        int max = Math.max(a, b);
        int min = a<b?a:b;
        /*
            3、第一种情况是两数可以整除
            大的那个数就是最小公倍数
            小的那个数就是最大公约数
         */
        if(max % min == 0){
            System.out.println("最大公约数为："+min);
            System.out.println("最小公倍数为："+max);
            // return关键字可以让方法提前结束
            return;
        }
        // 4、第二种情况两数不能整除，辗转相除法
        // 定义一个余数
        // 18 / 12  = 1...6
        int yu = max % min;
        while(yu != 0){
            max = min;
            min = yu;
            yu = max % min;
        }
        System.out.println("最大公约数为："+min);
        System.out.println("最小公倍数为："+a*b/min);
    }
}
